package com.hmall.item.service.impl;

import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hmall.item.mapper.ItemMapper;
import com.hmall.item.pojo.Item;
import com.hmall.item.service.IItemService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Service
@Slf4j
public class ItemService extends ServiceImpl<ItemMapper, Item> implements IItemService {

    /**
     * 新增item
     * @param item
     */
    @Override
    public void addItem(Item item){
        log.info("新增商品信息:{}",item);
        form(item);
        item.setCreateTime(new Date());
        item.setUpdateTime(new Date());
        save(item);
    }

    /**
     * 更新item
     * @param item
     */
    @Override
    public void updateItem(Item item) {
        //逻辑判断  检查商品是否下家
        Item item1 = getById(item.getId());
        if(item1.getStatus() !=2){
            throw new RuntimeException("未下架的产品不能修改");
        }
        form(item);
        item.setUpdateTime(new Date());
        updateById(item);
    }

    /**
     * 删除item
     * @param id
     */
    @Override
    public void deleteId(Long id) {
        Item item = getById(id);
        if (item.getStatus() != 2){
            throw new RuntimeException("没下架的产品不可删除");
        }
        removeById(id);
    }

    public void form(Item item) {
        log.info("新增商品信息:{}",item);
        //解析前端传递的规格 前端格式 "颜色":"黄色","大小":"20"
        //后端存储格式为json {"颜色":"黄色","大小":"20"}
        String spec = item.getSpec();
        //创建map 存储spec信息 key为spec名 value为spec值
        Map<String,String> specMap = new HashMap<>();
        if (StringUtils.hasLength(spec)){
            String[] split = spec.split(",");
            for (String str : split) {
                String[] keyAndValue = str.split(":");
                specMap.put(keyAndValue[0],keyAndValue[1]);
            }
            //将map转换为json字符串
            String specJsonStr = JSONUtil.toJsonStr(specMap);
            log.info(specJsonStr);
            //替换 spec
            item.setSpec(specJsonStr);
        }else{
            item.setSpec("{}");
        }
        item.setCreateTime(new Date());
        item.setUpdateTime(new Date());
        save(item);
    }
}
